1.flask-migrate 的介绍
- flask-migrate 必须依赖于 flask-script
- flask-migrate 的作用就是对数据库表进行增删改(注: flask-sqlalchemy 只能对表进行增加和删除的操作)
2.flask-migrate 的安装
pip3 install flask-migrate -i https://pypi.douban.com/simple # 使用豆瓣的镜像
3.flask-migrate 的使用
# app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
db = SQLAlchemy()
from models import *
app = Flask(__name__)
app.config.from_object('settings.ProConfig')
db.init_app(app)
manage = Manager(app)
Migrate(app, db)
manage.add_command('db', MigrateCommand) # 添加数据库迁移命令
@app.route('/home')
def home():
# 添加数据
# db.session.add(Users(name='Kevin', age=18, address='横沥'))
# db.session.commit()
# db.session.remove()
# 查询数据
# result = db.session.query(Users.name, Users.age).all()
# print(result)
# db.session.remove()
return '首页'
if __name__ == '__main__':
manage.run()
# settings.py
class BaseConfig(object):
# SQLAlchemy 配置
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@127.0.0.1:3306/db1?charset=utf8'
SQLALCHEMY_MAX_OVERFLOW = 10 # 允许溢出多少个连接(即:连接池的连接已满后,还可以创建多少条连接)
SQLALCHEMY_POOL_SIZE = 5 # 连接池中的连接数
SQLALCHEMY_POOL_TIMEOUT = 10 # 连接池中没有线程后最多等待的时间(单位:秒),如果超过指定时间还没有连接就报错
SQLALCHEMY_POOL_RECYCLE = -1 # 多久之后对线程池中的线程进行一次连接的回收(重置)(单位:秒)-> -1表示不重置
class ProConfig(BaseConfig):
pass
# models.py
from sqlalchemy import Column, Integer, VARCHAR
from app import db
# Users 表的类
class Users(db.Model): # 创建表的类一定要继承 db.Model
__tablename__ = 'users' # 表名
id = Column(Integer, primary_key=True, autoincrement=True) # 整型 设置主键 设置自增列
name = Column(VARCHAR(32), nullable=False, index=True) # varchar类型(长度:32) 不允许为空 将name字段设置为索引
age = Column(Integer) # 整形
address = Column(VARCHAR(32)) # varchar类型(长度:32)
- 所生成的数据库迁移命令
- 注意: 在进行第一次数据库迁移的时候必须是空的数据库没有任何表,否则会报错
python app.py db init # 初始化 migrations 文件夹用于记录表的修改情况,只执行一次
python app.py db migrate # 类似于 Django 中的 makemigrations
python app.py db upgrade # 类似于 Django 中的 migrate